/*
 * (C) Copyright 2011 Freescale Semiconductor, Inc.
 * Author: Fabio Estevam <fabio.estevam@freescale.com>
 *
 * Based on m28evk.h:
 * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
 * on behalf of DENX Software Engineering GmbH
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */
#ifndef __CONFIGS_MX28EVK_H__
#define __CONFIGS_MX28EVK_H__

/* System configurations */
#define CONFIG_MX28				/* i.MX28 SoC */
#define CONFIG_MACH_TYPE	MACH_TYPE_MX28EVK

#define CONFIG_SKIP_RELOCATE_UBOOT

/* U-Boot Commands */
#define CONFIG_SYS_NO_FLASH
#define CONFIG_DISPLAY_CPUINFO
#define CONFIG_DOS_PARTITION

#define CONFIG_CMD_CACHE
#define CONFIG_CMD_DATE
/*#define CONFIG_CMD_DHCP*/
#define CONFIG_CMD_FAT
#define CONFIG_CMD_GPIO
/*#define CONFIG_CMD_MII*/
#define CONFIG_CMD_MMC
/*#define CONFIG_CMD_PING*/
/*#define CONFIG_CMD_SF*/
/*#define CONFIG_CMD_SPI*/
#define CONFIG_CMD_USB
#define CONFIG_CMD_BOOTZ
#define CONFIG_CMD_NAND
#define CONFIG_CMD_NAND_TRIMFFS
/*#define CONFIG_VIDEO*/
#define CONFIG_SYS_PROMPT	"Frank@Uboot#"
#define CONFIG_SYS_64BIT_VSPRINTF

/* Memory configuration */
#define CONFIG_NR_DRAM_BANKS		1		/* 1 bank of DRAM */
#define PHYS_SDRAM_1			0x40000000	/* Base address */
#define PHYS_SDRAM_1_SIZE		0x40000000	/* Max 1 GB RAM */
#define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1
#define CONFIG_SYS_TEXT_BASE	0x41008000

/* Environment */
#ifndef CONFIG_ENV_IS_IN_SPI_FLASH
#define CONFIG_ENV_SIZE			(16 * 1024)
#else
#define CONFIG_ENV_SIZE			(4 * 1024)
#endif
#define CONFIG_ENV_OVERWRITE

/* Environment is in MMC */
#if defined(CONFIG_CMD_MMC) && defined(CONFIG_ENV_IS_IN_MMC)
#define CONFIG_ENV_OFFSET		(256 * 1024)
#define CONFIG_SYS_MMC_ENV_DEV		0
#endif

/* Environment is in NAND */
#if defined(CONFIG_CMD_NAND) && defined(CONFIG_ENV_IS_IN_NAND)
#define CONFIG_ENV_SIZE_REDUND		CONFIG_ENV_SIZE
#define CONFIG_ENV_SECT_SIZE		(128 * 1024)
#define CONFIG_ENV_RANGE		(512 * 1024)
#define CONFIG_ENV_OFFSET		0x100000
#define CONFIG_ENV_OFFSET_REDUND	\
		(CONFIG_ENV_OFFSET + CONFIG_ENV_RANGE)
		
#endif

/* Environemnt is in SPI flash */
#if defined(CONFIG_CMD_SF) && defined(CONFIG_ENV_IS_IN_SPI_FLASH)
#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
#define CONFIG_ENV_OFFSET		0x40000		/* 256K */
#define CONFIG_ENV_OFFSET_REDUND	(CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
#define CONFIG_ENV_SECT_SIZE		0x1000
#define CONFIG_ENV_SPI_CS		0
#define CONFIG_ENV_SPI_BUS		2
#define CONFIG_ENV_SPI_MAX_HZ		24000000
#define CONFIG_ENV_SPI_MODE		SPI_MODE_0
#endif

/* UBI and NAND partitioning */
#ifdef CONFIG_CMD_NAND
#define CONFIG_CMD_UBI
#define CONFIG_CMD_UBIFS
#define CONFIG_CMD_MTDPARTS
#define CONFIG_RBTREE
#define CONFIG_LZO
#define CONFIG_MTD_DEVICE
#define CONFIG_MTD_PARTITIONS
#define MTDIDS_DEFAULT			"nand0=gpmi-nand"
#define MTDPARTS_DEFAULT		"mtdparts=gpmi-nand:1536k(bootloder),"\
                                                "512k(params),"\
                                                "18m(kernel),"\
                                                "-(rootfs)"
#endif

/* FEC Ethernet on SoC */
#ifdef	CONFIG_CMD_NET
#define CONFIG_FEC_MXC
#define CONFIG_MX28_FEC_MAC_IN_OCOTP
#define IMX_FEC_BASE	MXS_ENET0_BASE
#define CONFIG_SYS_DISCOVER_PHY
#define CONFIG_FEC_MXC_PHYADDR		-1

#define CONFIG_ETH_PRIME
#define CONFIG_RMII
#define CONFIG_CMD_MII
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_PING
#define CONFIG_IPADDR			192.168.8.116	
#define CONFIG_SERVERIP			192.168.8.143
#define CONFIG_NETMASK			255.255.255.0
#define CONFIG_GATEWAYIP		192.168.8.1
/* Add for working with "strict" DHCP server */
#define CONFIG_BOOTP_SUBNETMASK
#define CONFIG_BOOTP_GATEWAY
#define CONFIG_BOOTP_DNS
#endif

/* RTC */
#ifdef	CONFIG_CMD_DATE
#define	CONFIG_RTC_MXS
#endif

/* USB */
#ifdef	CONFIG_CMD_USB
#define CONFIG_EHCI_MXS_PORT1
#define CONFIG_USB_MAX_CONTROLLER_COUNT	1
#define	CONFIG_USB_STORAGE
#define	CONFIG_USB_HOST_ETHER
#define	CONFIG_USB_ETHER_ASIX
#define	CONFIG_USB_ETHER_SMSC95XX
#endif

/* SPI */
#ifdef CONFIG_CMD_SPI
#define CONFIG_DEFAULT_SPI_BUS		2
#define CONFIG_DEFAULT_SPI_MODE		SPI_MODE_0

/* SPI Flash */
#ifdef CONFIG_CMD_SF
#define CONFIG_SF_DEFAULT_BUS		2
#define CONFIG_SF_DEFAULT_CS		0
/* this may vary and depends on the installed chip */
#define CONFIG_SPI_FLASH_SST
#define CONFIG_SF_DEFAULT_MODE		SPI_MODE_0
#define CONFIG_SF_DEFAULT_SPEED		24000000
#endif

#endif

/* Framebuffer support */
#ifdef CONFIG_VIDEO
#define CONFIG_VIDEO_LOGO
#define CONFIG_SPLASH_SCREEN
#define CONFIG_CMD_BMP
#define CONFIG_BMP_16BPP
#define CONFIG_VIDEO_BMP_RLE8
#define CONFIG_VIDEO_BMP_GZIP
#define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE	(512 << 10)
#endif

/* Boot Linux */
#define CONFIG_BOOTDELAY	0
#define CONFIG_BOOTFILE		"uImage"
#define CONFIG_LOADADDR		0x41300000
#define CONFIG_SYS_LOAD_ADDR	CONFIG_LOADADDR

/* Extra Environment */
#define CONFIG_EXTRA_ENV_SETTINGS \
	"kernel=uImage\0"                                               	\
       "kernelsize=0x300000\0"                                         	\
       "rootfs=rootfs.ubifs\0"                                         	\
       "kerneladdr="       "0x00200000\0"                             	\
	"nfsroot=/home/notroot/nfs/rootfs\0" 					\
	"bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs " 		\
		"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp " 		\
		"fec_mac=${ethaddr}\0" 						\
	"bootcmd_net=run bootargs_nfs; dhcp; bootm\0" 				\
	"bootcmd_mmc=run bootargs_mmc; " 					\
		"mmc read 0 ${loadaddr} 100 3000; bootm\0" 			\
	"bootargs_nand=gpmi=g console=ttyAM0,115200n8 ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs fec_mac=ethact\0"	\
	"bootargs_mmc=gpmi=g console=ttyAM0,115200n8 root=/dev/mmcblk0p3 rw fec_mac= ethact\0"				\
	"bootargs=gpmi=g console=ttyAM0,115200n8 ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs fec_mac=ethact \0" 	\
	"kernel=uImage\0"												\
        "upuboot=tftp ${loadaddr} ${serverip}:imx28_ivt_uboot.sb;nand erase 0xa80000 0x80000; nand write ${loadaddr} 0xa80000 0x80000\0"\
        "upkernel="         "tftp ${loadaddr} ${serverip}:${kernel};"                           	\
                            "nand erase  ${kerneladdr} ${kernelsize};"                     		\
                            "nand write ${loadaddr} ${kerneladdr} ${kernelsize};\0"       		\
                            "setenv kernelsize ${filesize}; saveenv\0"                          	\
         "uprootfs="         "mtdparts default;"                                                	\
                                "nand erase rootfs;"                                            	\
                                "ubi part rootfs;"                                              	\
                                "ubi create  rootfs;"                                           	\
                                "tftp ${loadaddr} ${rootfs};"                                   	\
                                "ubi write ${loadaddr} rootfs ${filesize}\0"            		\
        "tftp_boot=tftp ${loadaddr} ${serverip}:uImage; bootm;\0"                               	\
        "nand_boot=nand read.jffs2 ${loadaddr} ${kerneladdr} ${kernelsize};"                    	\
                                                                "bootm ${loadaddr}\0"           	\
        "setnandboot=setenv bootcmd 'run  nand_boot';saveenv \0"                                	\
        "settftpboot=setenv bootcmd 'run  tftp_boot';saveenv \0"                                	\
        "upsystem=run upkernel;run uprootfs;reset \0"   						\
	"ethaddr=02:00:92:b3:c4:a8 \0"
	
	
#define CONFIG_BOOTCOMMAND "run nand_boot"

/* The rest of the configuration is shared */
#include <configs/mxs.h>

#endif /* __CONFIGS_MX28EVK_H__ */
